package com.yingside.gui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestMouseEventFrame extends JFrame {

    private JLabel lblMouse;

    public TestMouseEventFrame() {
        this.setTitle("鼠标事件窗口");
        this.setBounds(300,300,400,400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        lblMouse = new JLabel("鼠标的位置:");

        this.add(lblMouse,BorderLayout.SOUTH);

        //这个事件主要和鼠标的 点击，进入和退出
        /*
        this.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                //Click表示按下并且松开的两个过程
                int x = e.getX(); //获取鼠标当前的x坐标位置
                int y = e.getY(); //获取鼠标当前的Y坐标位置

                lblMouse.setText("鼠标点击的位置: x=" + x + ", y=" + y );
            }

            @Override
            public void mousePressed(MouseEvent e) {
                //只是表示鼠标的按下Press
                int x = e.getX(); //获取鼠标当前的x坐标位置
                int y = e.getY(); //获取鼠标当前的Y坐标位置

                lblMouse.setText("鼠标按下的位置: x=" + x + ", y=" + y );
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                //只是表示鼠标的松开
                int x = e.getX(); //获取鼠标当前的x坐标位置
                int y = e.getY(); //获取鼠标当前的Y坐标位置

                lblMouse.setText("鼠标松开的位置: x=" + x + ", y=" + y );
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                //鼠标进入this对象范围
                int x = e.getX(); //获取鼠标当前的x坐标位置
                int y = e.getY(); //获取鼠标当前的Y坐标位置

                lblMouse.setText("鼠标进入的位置: x=" + x + ", y=" + y );
            }

            @Override
            public void mouseExited(MouseEvent e) {
                //鼠标退出this对象范围
                int x = e.getX(); //获取鼠标当前的x坐标位置
                int y = e.getY(); //获取鼠标当前的Y坐标位置

                lblMouse.setText("鼠标退出的位置: x=" + x + ", y=" + y );
            }
        });
        */

        //MouseAdapter实际就是对几个接口的空实现，为的就是我们自己在重写Mouse事件方法的时候比较方便
        /*
        this.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
            }
        });
        */


        //MouseAdapter实现了MouseListener, MouseWheelListener, MouseMotionListener这三个接口
        //所以，addMouseMotionListener,addMouseListener,addMouseWheelListener这几个事件方法都能放入MouseAdapter抽象类
        //但是要注意，具体的时间必须和他自己实现方法想对应
        /*
        this.addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                //鼠标的拖拽
                int x = e.getX(); //获取鼠标当前的x坐标位置
                int y = e.getY(); //获取鼠标当前的Y坐标位置

                lblMouse.setText("鼠标拖拽的位置: x=" + x + ", y=" + y );
            }

            @Override
            public void mouseMoved(MouseEvent e) {
                //鼠标的移动
                int x = e.getX(); //获取鼠标当前的x坐标位置
                int y = e.getY(); //获取鼠标当前的Y坐标位置

                lblMouse.setText("鼠标移动的位置: x=" + x + ", y=" + y );
            }
        });
        */

        this.addMouseWheelListener(new MouseWheelListener() {
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) {
                int x = e.getX(); //获取鼠标当前的x坐标位置
                int y = e.getY(); //获取鼠标当前的Y坐标位置

                int wheelRotation = e.getWheelRotation();

                lblMouse.setText("鼠标在 x=" + x + ", y=" + y + "位置 " + wheelRotation + " 滚动");
            }
        });
    }

    public static void main(String[] args) {
        TestMouseEventFrame mouseEventFrame = new TestMouseEventFrame();
        mouseEventFrame.setVisible(true);

    }
}
